package com.iflytek.ssm.dao;

import com.iflytek.ssm.entity.User;
import com.iflytek.ssm.utils.DBUtil;
import org.springframework.stereotype.Repository;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

@Repository
public class UserDao {


    /**
     * 根据账号和密码查找用户
     *
     * @param account 账号
     * @param pwd     密码
     * @return
     * @throws SQLException
     */
    public User getAccountAndPwd(String account, String pwd) throws SQLException {

        // 1、获取连接
        Connection con = DBUtil.getConnection();
        ResultSet rs = null;
        PreparedStatement ps = null;
        // 2、准备sql：参数用?占位符去替换
        String sql = "SELECT * FROM `users` where account=? and `password`=?";
        try {
            /// 3、参数预处理
            ps = con.prepareStatement(sql);
            ps.setString(1, account);
            ps.setString(2, pwd);

            // 4、执行sql 获取数据库返回的结果集
            rs = ps.executeQuery();
            if (rs.next()) {
                User user = new User();
                user.setId(rs.getInt("id"));
                user.setName(rs.getString("name"));
                user.setAccount(rs.getString("account"));
                user.setPwd(rs.getString("password"));
                // ...
                return user;
            }
        } catch (Exception e) {
            e.printStackTrace();

        } finally {
            // 5、关闭链接
            DBUtil.close(rs);
            DBUtil.close(ps);
            DBUtil.close(con);
        }
        return null;
    }


    /**
     * 根据id修改用户密码
     *
     * @param pwd 密码
     * @param id
     * @return
     * @throws SQLException
     */
    public Integer updatePwdById(String pwd, Integer id) throws SQLException {

        // 1、获取连接
        Connection con = DBUtil.getConnection();
        // 2、准备sql
        String sql = "UPDATE  `users` set `password`=? where id=?";
        try {
            // 3、参数预处理
            PreparedStatement ps = con.prepareStatement(sql);
            ps.setString(1, pwd);
            ps.setInt(2, id);

            // 4、执行sql 获取数据库返回的结果集
            int num = ps.executeUpdate();
            System.out.println("updatePwdById:num=" + num);

            // 注意手动提交
            con.commit();
            return num;
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        } finally {
            // 5、关闭链接
            DBUtil.close(con);
        }
    }


    /**
     * 根据ID获取用户信息
     *
     * @param id
     * @return User对象
     * @throws SQLException
     */
    public User getById(Integer id) throws SQLException {
        // 1、获取连接
        Connection con = DBUtil.getConnection();
        ResultSet rs = null;
        PreparedStatement ps = null;
        // 2、准备sql：参数用?占位符去替换
        String sql = "SELECT * FROM `users` WHERE id=?";
        try {
            /// 3、参数预处理
            ps = con.prepareStatement(sql);
            ps.setInt(1, id);

            // 4、执行sql 获取数据库返回的结果集
            rs = ps.executeQuery();
            if (rs.next()) {
                User user = new User();
                user.setId(rs.getInt("id"));
                user.setName(rs.getString("name"));
                user.setAccount(rs.getString("account"));
                user.setPwd(rs.getString("password"));
                // ...
                return user;
            }
        } catch (Exception e) {
            e.printStackTrace();

        } finally {
            // 5、关闭链接
            DBUtil.close(rs);
            DBUtil.close(ps);
            DBUtil.close(con);
        }
        return null;
    }


}
